#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

/*
邻接表表示法
*/

#define MAX_VERTEX_NUM 50 // 最大顶点数

// 边表结点类型
typedef struct edgenode
{
    int adjvex;            // 顶点的序号
    struct edgenode *next; // 指向下一条边的指针
} EdgeNode;

// 顶点表结点
typedef struct vnode
{
    char vertex;                  // 顶点域
    EdgeNode *link;               // 边表头指针
} VNode, AdjList[MAX_VERTEX_NUM]; // 邻接表

// 定义别名 图
typedef AdjList ALGraph;

// 创建无向图邻接表. n 为顶点数，e为边数
void createALGraph(ALGraph ALG, int n, int e)
{
    // 建立顶点表
    for (int i = 0; i < n; i++)
    {
        ALG->vertex = getchar(); // 读入顶点信息
        ALG->link = NULL;        // 边表头指针置空
    }

    EdgeNode *p;
    int i, j;

    for (int k = 0; k < e; k++)
    {
        scanf("%d, %d", &i, &j); // 读入边(vi, vj) 的顶点序号
        p = (EdgeNode *)malloc(sizeof(EdgeNode));
        p->adjvex = j;
        p->next = ALG[i].link;
        ALG[i].link = p;

        p = (EdgeNode *)malloc(sizeof(EdgeNode));
        p->adjvex = i;
        p->next = ALG[j].link;
        ALG[j].link = p;
    }
}

// DFS  深度优先搜索遍历
int visited[20];
void DFS(ALGraph ALG, int i)
{
    printf("v%d-->", i);
    visited[i] = 1;
    EdgeNode *p = ALG[i].link; // 取邻接表的表头指针

    int j;
    while (p != NULL)
    {
        j = p->adjvex;
        if(!visited[j]){
            DFS(ALG, j);
        }

        p = p->next;
    }
}

// BFS  广度优先搜索遍历
void BFS(ALGraph G, int i, int n){
    // 通过队列实现
}

int main()
{
    return 0;
}